package com.bxw.forum.component;

import com.bxw.forum.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import javax.websocket.Session;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;

@Component
@Slf4j
// 通过这个类来记录当前用户在线的状态. (维护了 userId 和 WebSocketSession 之间的映射)
public class OnlineUserManager {
    private ConcurrentHashMap<Long, WebSocketSession> sessions = new ConcurrentHashMap<>();

    /**
     * 将用户ID与session存入 哈希表
     * @param userId 用户ID
     * @param session 对应用户Session
     */
    public void online(Long userId, WebSocketSession session) {
        if(sessions.get(userId) != null) {
            log.warn("用户已经链接过websocket");
            return;
        }
        sessions.put(userId,session);
        log.info("用户上线");
    }

    /**
     * 将用户ID与session移除 哈希表
     * @param userId 用户ID
     * @param session 对应用户Session
     */
    public void offline(Long userId,WebSocketSession session) {
        WebSocketSession ExistSession = sessions.get(userId);
        if(ExistSession == session) {
            sessions.remove(userId);
            log.info("用户下线");
        }
    }

    /**
     * 通过用户ID获取到对应的Session
     * @param userId 用户ID
     * @return WebSocketSession
     */
    public WebSocketSession getSession(Long userId) {
        return sessions.get(userId);
    }
}
